package rfile;

import java.io.IOException;
import java.io.RandomAccessFile;

public class ImageFileTestMain {
	
	public static void main(String[] args) throws IOException {
		
		RandomAccessFile rf = new RandomAccessFile(
				"C:/java-master/poster.bmp", "rw");
		
		RandomAccessFile rf2 = new RandomAccessFile(
				"C:/java-master/poster2.bmp", "rw");
		
		// BMP 파일의 헤더는 54 바이트
		// 따라서, 55번째 부터 픽셀 데이터가 기록되어 있음
		
		// 그림 너비는 19번째 바이트 부터 4 바이트
		rf.seek(18);
		int width = rf.read() + rf.read() * 256
				+ rf.read() * 256 * 256
				+ rf.read() * 256 * 256 * 256;
		System.out.println("그림 너비: " + width);
		// 그림 높이는 23번째 바이트 부터 4 바이트
		int height = rf.read() + rf.read() * 256
				+ rf.read() * 256 * 256
				+ rf.read() * 256 * 256 * 256;
		System.out.println("그림 높이: " + height);
		
		// 복사 대상
		int beginLine = 500;
		int endLine = 800;
		
		for (int h = beginLine; h < endLine; h++) {
			for (int w = 0; w < width; w++) {
				// (w,h) 좌표로 커서 이동
				int idx = 54 + h * (width * 3) + (w * 3);
				rf.seek(idx);
				
				// 1 픽셀을 읽기 위해 3 byte를 읽음
				int r = rf.read();	// red
				int g = rf.read();	// green
				int b = rf.read();	// blue
				
				rf2.seek(54 + (h - beginLine) * (width * 3) + (w * 3));
				rf2.write(r);
				rf2.write(g);
				rf2.write(b);
			}
		}
		
		rf.close();
		rf2.close();
	}
	
}
